package chapter01;

import org.junit.Test;

/**
 * 编写带有下列声明的例程：
 * public void permute(String str);
 * public void permute(char[] str, int low, int high);
 * 第一个例程是个驱动程序，它调用第二个例程并显示String str中的字符的所有排列。
 * 如果str是"abc",那么输出的串则是abc,acb,bac,bca,cab和cba。第二个例程使用递归。
 */
public class Q6 {

    @Test
    public void test() {
        permute("abc");
    }

    public void permute(String str) {
        char[] chs = str.toCharArray();
        permute(chs, 0, chs.length - 1);
    }

    private void permute(char[] chs, int low, int high) {
        if (low == high) {
            String s = "";
            for (int i = 0; i < chs.length; i++) {
                s+= chs[i];
            }
            System.out.println(s);
        }
        for (int i = low; i < chs.length; i++) {
            swap(chs, i, low);
            permute(chs, low + 1, high);
            swap(chs, i, low);
        }
    }

    private void swap(char[] chs, int a, int b){
        char temp = chs[a];
        chs[a] = chs[b];
        chs[b] = temp;
    }
}
